package com.example.basic.web.service.report;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.basic.web.request.DepotQueryRequest;
import com.example.basic.web.response.report.InOutRecordResponse;
import com.example.basic.web.response.report.StockCountResponse;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 系统操作日志表 服务类
 * </p>
 */
public interface ReportService {

    /**
     * 库存信息查询
     * @param queryPage 分页
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @param depotCode 库位编码 0-全部
     * @return
     */
    IPage<StockCountResponse> queryStockInfo(Page<StockCountResponse> queryPage, String searchParam, String pharmCode, String zoneCode, String depotCode);

    /**
     * 库存信息统计
     *
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode   仓库编码
     * @param zoneCode    分区编码
     * @param depotCode 库位编码
     * @return
     */
    Map stockCount(String searchParam, String pharmCode, String zoneCode, String depotCode);

    /**
     * 出入库记录查询
     * @param queryPage 分页
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @param depotCode 库位编码 0-全部
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param type 出入库类型 0-全部
     * @return
     */
    IPage<InOutRecordResponse> queryInOutRecord(Page<InOutRecordResponse> queryPage, String searchParam, String pharmCode, String zoneCode, String depotCode, String beginTime, String endTime, String type);

    /**
     * 出入库记录统计
     *
     * @param searchParam 仓库编码
     * @param pharmCode   仓库编码
     * @param zoneCode    分区编码
     * @param depotCode 库位编码
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param type 类型
     * @return
     */
    Map InOutRecordCount(String searchParam, String pharmCode, String zoneCode, String depotCode, String beginTime, String endTime, String type);

    /**
     * 库位信息查询
     * @param queryPage 分页
     * @param depotQueryRequest
     * @return
     */
    IPage<StockCountResponse> queryDepotInfo(Page<StockCountResponse> queryPage, DepotQueryRequest depotQueryRequest);

    /**
     * 库位信息统计
     * @param depotQueryRequest
     * @return
     */
    Map depotCount(DepotQueryRequest depotQueryRequest);

    /**
     * 库存汇总报表
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @return
     */
    Map stockSumReport(String pharmCode, String zoneCode);

    /**
     * 库存明细报表
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @param depotCode 库位编码
     * @param status 状态 0-全部 1-占用，2-空闲
     * @return
     */
    Map stockDetailReport(String searchParam, String pharmCode, String zoneCode, String depotCode, String status);

    /**
     * 出入库记录报表
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @param depotCode 库位编码 0-全部
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param type 出入库类型 0-全部
     * @return
     */
    Map InOutRecordReport(String searchParam, String pharmCode, String zoneCode, String depotCode, String beginTime, String endTime,String type);

    /**
     * 库位信息报表
     * @param depotQueryRequest
     * @return
     */
    Map depotInfoReport(DepotQueryRequest depotQueryRequest);

    /**
     * 库存预警报表
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @return
     */
    Map depotWarnReport(String pharmCode, String zoneCode);

    /**
     * 首页设备情况
     * @return
     */
    List<Map> homeDeviceReport();

    /**
     * 今日数量统计
     * @return
     */
    Map homeRemainsCount();

    /**
     * 库位安全预警数
     * @return
     */
    Integer homeDepotWarn();

    /**
     * 特殊环节占比
     * @param isAll 1-今日，2-历史
     * @return
     */
    Map homeSpecialCount(String isAll);

    /**
     * 出入库作业执行情况
     * @return
     */
    List<Map> homeInstructCount();

    /**
     * 库位统计对比情况
     * @return
     */
    List<Map> homeDepotCount(String pharmCode);

    /**
     * 近一周火化，入馆统计
     * @return
     */
    Map homeWeekCount();
}